package com.xmtlxx.web.controller.oms.service;

import com.xmtlxx.common.core.domain.PageQuery;
import com.xmtlxx.common.core.page.TableDataInfo;
import com.xmtlxx.oms.domain.Task;
import com.xmtlxx.oms.domain.bo.CancelTaskBo;
import com.xmtlxx.oms.domain.bo.TaskBo;
import com.xmtlxx.oms.domain.vo.DisposalApplyVo;
import com.xmtlxx.oms.domain.vo.TaskVo;
import com.xmtlxx.system.domain.SysOss;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 出入库订单Service接口
 *
 * @author xmtlxx
 * @date 2022-08-12
 */
public interface ITaskService {

    /**
     * 查询出入库订单
     *
     * @param id 出入库订单主键
     * @return 出入库订单
     */
    TaskVo queryById(String id);

    TaskVo initBean(TaskVo taskVo);

    TaskVo initReturnBean(TaskVo taskVo);

    TaskVo initReplaceBean(TaskVo taskVo);

    /**
     * 查询出入库订单列表
     *
     * @param bo 出入库订单
     * @return 出入库订单集合
     */
    TableDataInfo<TaskVo> queryPageList(TaskBo bo, PageQuery pageQuery);

    TableDataInfo<TaskVo> queryPageListWithOutLogin(TaskBo bo, PageQuery pageQuery);

    TaskVo initDealBean(List<String> ids);

    /**
     * 查询出入库订单列表
     *
     * @param bo 出入库订单
     * @return 出入库订单集合
     */
    List<TaskVo> queryList(TaskBo bo);

    List<TaskVo> taskStatistics();

    List<TaskVo> outTaskStatistics(TaskBo task);

    TaskVo getTaskById(String id);

    TaskVo selectTaskVoByTaskNo(TaskBo task);

    /**
     * 修改出入库订单
     *
     * @param bo 出入库订单
     * @return 结果
     */
    TaskVo insertByBo(TaskBo bo);

    TaskVo insertByBoV2(TaskBo bo);

    TaskVo insertTaskBo(TaskBo bo);

    TaskVo insertTransferTaskBo(TaskBo bo);

    TaskVo insertReturnTaskBo(TaskBo bo);

    /**
     * 修改出入库订单
     *
     * @param bo 出入库订单
     * @return 结果
     */
    Boolean updateByBo(TaskBo bo);

    Boolean updateByBoV2(TaskBo bo);

    Boolean updateTaskBo(TaskBo bo);

    Boolean updateTaskEnty(TaskBo bo);

    Boolean finishTaskEnty(TaskBo bo);

    Boolean returnTimeUpdate(TaskBo bo);

    Boolean replaceTask(TaskBo bo);

    /**
     * 校验并批量删除出入库订单信息
     *
     * @param ids 需要删除的出入库订单主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return 结果
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);

    Boolean deleteWithDtlByIds(TaskBo bo);

    Boolean deleteWithTask(String id,String cancelReason);

    Boolean deleteWithTaskByAdmin(String id,String cancelReason);

    Boolean restoreWithTask(String id);

    TaskVo insertByAPI(TaskBo bo);

    TaskVo insertTaskByAPI(TaskBo bo);

    TaskVo insertByOutWarehouseAPI(TaskBo bo);

    Boolean updateTaskNums();

    Boolean updateOrderWithWaybill();

    Boolean updatePics(String taskNo);

    void updateHandoverFile();

    Boolean updateWarehouseNums();

    Map<String,Object> countWeekWithTask(TaskBo task);

    Long selectCountTask(@Param("task") TaskBo task);

    Boolean reviewOss(String id, List<SysOss> oss);

    Task checkTask(TaskVo vo);

    TaskVo uploadVideo(TaskVo vo);

    /**
     * 获取取消订单
     * @author hergreen
     * @date 2024/09/23 10:57
     * @param bo bo
     * @param pageQuery 分页
     * @return com.xmtlxx.common.core.page.TableDataInfo<com.xmtlxx.oms.domain.bo.CancelTaskBo>
     */
    TableDataInfo<CancelTaskBo> cancelTaskList(CancelTaskBo bo, PageQuery pageQuery);

    List<DisposalApplyVo> getDisposalApplyList(TaskBo task);

    boolean disposalFinish(String id);


}
